/*

*/

EQ:
  PUSH(FP);
  MOV(FP,SP);
  CMP(IND(FPARG(3)),IND(FPARG(2))); //compare types
  JUMP_EQ(EQ_CHECK_TYPES);
EQ_RETURN_FALSE:
  POP(FP);
  MOV(R0, 3);
  RETURN;
EQ_CHECK_TYPES:
  CMP(IND(FPARG(3)),T_CHAR);
  JUMP_EQ(EQ_COMPARE_VAL);
  CMP(IND(FPARG(3)),T_INTEGER);
  JUMP_EQ(EQ_COMPARE_VAL);
  CMP(IND(FPARG(3)),T_SYMBOL);
  JUMP_EQ(EQ_COMPARE_VAL);
  CMP(IND(FPARG(3)),T_FRACTION);
  JUMP_EQ(EQ_COMPARE_VAL_FRACTION);
  
  CMP(FPARG(3),FPARG(2));
  JUMP_NE(EQ_RETURN_FALSE);
  POP(FP);
  MOV(R0, 5);
  RETURN;

EQ_COMPARE_VAL:
  CMP(INDD(FPARG(3),1),INDD(FPARG(2),1));
  JUMP_NE(EQ_RETURN_FALSE);
  POP(FP);
  MOV(R0, 5);
  RETURN;
EQ_COMPARE_VAL_FRACTION:
  PUSH(R1);
  MOV(R0,INDD(FPARG(2),1));
  MUL(R0,INDD(FPARG(3),2));
  MOV(R1,INDD(FPARG(3),1));
  MUL(R1,INDD(FPARG(2),2));
  CMP(R0,R1);
  POP(R1);
  JUMP_NE(EQ_RETURN_FALSE);


  POP(FP);
  MOV(R0, 5);
  RETURN;
